<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        /**
         * 数据类型转换通常指将其他数据类型转成 字符串 数字 布尔值
         *  数据类型转换有两种: 强制转换(显式转换) 和 自动转换(隐式转换)
         * 
         * 自动转换(隐式转换): 关系运算符
         * JS引擎会根据运算符自动转成适合运算符运算符的数据类型
         * 
         * 数字和字符串比较时,字符串转成数字
         * 
         * 两个字符串比较时,先比较第一个字符的ASCII码值,如果第一个字符相同,则比较后一位
         * 
         * console.log( null == undefined );// true 都转成布尔值
         * console.log( null === undefined );// false 没有类型转换
         * 
         * 数字和布尔值比较时,布尔值转成数字
         * 
         * 布尔值和字符串比较时,都转成数字
         * 
         * 
        */

        // 数字和字符串比较时,字符串转成数字
        console.log(5 > '2');// true 自动将'2'转成数字
        console.log(98 > 'a');// false 自动将'a'转成数字

        // 两个字符串比较时,先比较第一个字符的ASCII码值,如果第一个字符相同,则比较后一位
        console.log('9' > '7');// true
        console.log('abc' < 'adc');// false

        console.log(null == undefined);// true 都转成布尔值
        console.log(null === undefined);// false 没有类型转换

        // 数字和布尔值比较时,布尔值转成数字
        console.log(2 == true);// false

        // 布尔值和字符串比较时,都转成数字
        console.log(true == 'a');// false 
        console.log(true == '');// false
        console.log(false == '0');// true


        // 面试题: 为什么?
        // console.log( [] == ![] );// true
        // console.log( 0 == 0 );// true

        var result = 12 + 2 + '12' - 2 * 2;
        //               14 + '12' - 2 * 2
        //                  '1412' - 2 * 2
        //                  '1412' - 4 = 1408
        console.log(result);// 1408
    </script>
</body>

</html>